package test;

public final class XmapMath {

    public static int intSqrt1(int input) {
        if (input <= 0) {
            return 0;
        }
        // 算法原理:1+3+5+...+(2n-1) = n^2
        // 根据公式我们要求X的开方,只需让X-1,X-3,X-5....直到X为负数,这时所有成功的次数就是平方根的整数部分.
        int result = -1, i = 1;
        while (input >= 0) {
            input -= i;
            i += 2;
            result++;
        }
        return result;
    }
    //    今天发现一个快一点的方法(牛顿迭代法解方程x^2=a)

    public static int intSqrt2(int input) {
        if (input <= 0) {
            return 0;
        }
        int result = 2, l2 = 0;
        for (int i = 0; i < 25; i++) {
            result = (result + input / result) / 2;
            if (l2 <= result && i != 0) {
                break;
            }
            l2 = result;
        }
        return result;
    }
}
